package levante;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Iterator;
import java.util.Scanner;

public class Teammanager {
	
	private static Scanner sc;
	private static ArrayList <Terceros> vec;

	public static void main(String[] args) {
		vec = new ArrayList<Terceros>(100);
		sc = new Scanner(System.in);
		int opc, opc2, opc3;
		boolean ok = false; 
		boolean ok2 = false;
		
		do{
		System.out.println(" Elija una opcion: \n 1 - Introducir personal \n 2 - Eliminar personal\n 3 - Listar en pantalla a todo el personal\n 4 - Mostrar resumen\n 5 - Crear fichero de personal\n 6 - Salir del programa \n");
		opc = sc.nextShort();
		
		switch(opc){
		case 1: 
			System.out.println(" Elija una opcion: \n1- Introducir por fichero \n2- Introducir Manualmente");
			opc3 = sc.nextShort();
			if(opc3 == 1){
				//FICHERO
			}
			else if(opc3 == 1)
			do{
			System.out.println("Tipo de personal: \n 1 - Jugador \n 2 - Junta \n 3 - Accionista \n 4 - Equipo Tecnico \n");
			opc2 = sc.nextShort();
			switch(opc2){
			case 1:
				Jugador j = new Jugador();
			    j.introduzcaTercero();
				System.out.println("\nJugador creado satisfactoriamente!\n");
				vec.add(j);
				ok2 = true;
				break;
			case 2:
				Junta ju = new Junta();
				ju.introduzcaTercero();
				System.out.println("\nJunta creado satisfactoriamente!\n");
				vec.add(ju);
				ok2 = true;
				break;
			case 3:
				Accionista a = new Accionista();
				a.introduzcaTercero();
				System.out.println("\nAccionista creado satisfactoriamente!\n");
				vec.add(a);
				ok2 = true;
				break;
			case 4:
				EquipoTecnico e = new EquipoTecnico();
				e.introduzcaTercero();
				System.out.println("\nEquipoTecnico creado satisfactoriamente!\n");
				vec.add(e);
				ok2 = true;
				break;
			default:
				System.out.println("\nOpcion desconocida. Quiza haya tecleado mal...\n");
				break;	
			}
			}while(!ok2);
			else
				System.out.println("\nOpcion desconocida. Quiza haya tecleado mal...\n");
			break;
		case 2:
			boolean oke = false;
			System.out.println("Nombre de la persona a eliminar: ");
			String sname = sc.nextLine();	
			Iterator<Terceros> vec_it = vec.iterator();
			while(vec_it.hasNext())
			{
				String a = vec_it.next().getNombre();
				System.out.println("\nBuscando...");
				
				if(a.equals(sname))
				{
					vec_it.remove();
					oke = true;
				}
			}
			if (oke)
				System.out.println("\nElemento borrado!");
			else
				System.out.println("\nElemento no encontrado!");
			sc.nextLine();
			sc.reset();
			break;
		case 3:
			ListarPersonal(vec);
			break;
		case 4:
			Resumen(vec);
			break;
		case 5:
			CrearFichero(vec);
			break;
		case 6:
			System.exit(0);
			ok = true;
			break;
		default:
			System.out.println("Opcion desconocida. Quiza haya tecleado mal...\n");
		}
		}while(!ok);

	}
	
	private static  void  ListarPersonal(ArrayList <Terceros> vec){
		System.out.println("************************");
		
		for (Terceros t : vec) {
			System.out.println( );
			System.out.println(t);
			System.out.println("---");
			System.out.println( );
		}
		Resumen(vec);
		System.out.println("************************");
			
	}
	private static  void  Resumen(ArrayList <Terceros> vec){
		int jugador = 0;
		int accionista = 0;
		int junta = 0;
		int eq_tec = 0;
		int tercero = 0;
		
		for (Terceros t : vec) {
			tercero++;
			if( t.getClass().getName() == "levante.Accionista"){accionista++;}
			if( t.getClass().getName() == "levante.EquipoTecnico"){eq_tec++;}
			if( t.getClass().getName() == "levante.Jugador"){jugador++;}
			if( t.getClass().getName() == "levante.Junta"){junta++;}
		}
		System.out.println("RESUMEN:");
		System.out.println(" ");
		System.out.println("Personal compuesto por "+tercero+" personas. Desglose:");
		System.out.println(jugador + " jugadores,");
		System.out.println(eq_tec + " del equipo tecnico,");
		System.out.println(junta + " de la junta directiva y ");
		System.out.println(accionista + " accionista/as");
    }
	private static  void  CrearFichero(ArrayList <Terceros> vec){
		Calendar fecha = new GregorianCalendar();
		FileWriter fichero = null;
        PrintWriter pw = null;
        int jugador = 0;
		int accionista = 0;
		int junta = 0;
		int eq_tec = 0;
		int tercero = 0;
        try
        {
            fichero = new FileWriter("levante_"+fecha.get(Calendar.DAY_OF_MONTH)+fecha.get(Calendar.MONTH)+fecha.get(Calendar.YEAR)+".txt");
            pw = new PrintWriter(fichero);
 
            pw.println("************************");
    		
    		for (Terceros t : vec) {
    			pw.println( );
    			pw.println(t);
    			pw.println("---");
    			pw.println( );
    			tercero++;
    			if( t.getClass().getName() == "levante.Accionista"){accionista++;}
    			if( t.getClass().getName() == "levante.EquipoTecnico"){eq_tec++;}
    			if( t.getClass().getName() == "levante.Jugador"){jugador++;}
    			if( t.getClass().getName() == "levante.Junta"){junta++;}
    		}
    		Resumen(vec);
    		pw.println("************************");
    		pw.println("RESUMEN:");
    		pw.println(" ");
    		pw.println("Personal compuesto por "+tercero+" personas. Desglose:");
    		pw.println(jugador + " jugadores,");
    		pw.println(eq_tec + " del equipo t�cnico,");
    		pw.println(junta + " de la junta directiva y ");
    		pw.println(accionista + " accionista/as");
            
            
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
           try {
           // Nuevamente aprovechamos el finally para 
           // asegurarnos que se cierra el fichero.
           if (null != fichero)
              fichero.close();
           } catch (Exception e2) {
              e2.printStackTrace();
           }
        }
	}
	private ArrayList<Terceros> Damefich(String n_fich){
		
		File archivo = null;
	      FileReader fr = null;
	      BufferedReader br = null;
	 
	      try {
	         // Apertura del fichero y creacion de BufferedReader para poder
	         // hacer una lectura comoda (disponer del metodo readLine()).
	         archivo = new File (n_fich);
	         fr = new FileReader (archivo);
	         br = new BufferedReader(fr);
	 
	         // Lectura del fichero
	         String linea;
	         while((linea=br.readLine())!=null){
	        	 if(linea == "Accionista"){
	        		 String[] nombre =br.readLine().split("Nombre: ");
	        		 String[] fecha =br.readLine().split("Fecha de nacimiento: ");
	        		 String[] acciones =br.readLine().split("Porcentaje de acciones: ");
	        		 Accionista j = new Accionista(nombre[1], fecha[1], Integer.parseInt(acciones[1])); 
	        	 }
	        	 if(linea == "EquipoTecnico"){
	        		 String[] nombre =br.readLine().split("Nombre: ");
	        		 String[] fecha =br.readLine().split("Fecha de nacimiento: ");
	        		 
	        		 String[] sueldo =br.readLine().split("Sueldo anual: ");
	        		 String[] especialidad =br.readLine().split("Especialidad: ");
	        		 EquipoTecnico j = new EquipoTecnico(nombre[1], fecha[1],especialidad[1], Integer.parseInt(sueldo[1])); 
	        	 }
	        	 if(linea == "Jugador"){
	        		 String[] nombre =br.readLine().split("Nombre: ");
	        		 String[] fecha =br.readLine().split("Fecha de nacimiento: ");
	        		 
	        		 String[] clausula =br.readLine().split("Clausula de recesion (en euros): ");
	        		 String[] pos =br.readLine().split("Posicion: ");
	        		 Jugador j = new Jugador(nombre[1], fecha[1],pos[1], Integer.parseInt(clausula[1]));  
	        	 }
	        	 if(linea == "Junta"){
	        		 String[] nombre =br.readLine().split("Nombre: ");
	        		 String[] fecha =br.readLine().split("Fecha de nacimiento: ");
	        		 String[] cargo =br.readLine().split("Cargo: ");
	        		 Junta j = new Junta(nombre[1], fecha[1],cargo[1]); 
	        		 
	        	 }
	         }
	            
	      }
	      catch(Exception e){
	         e.printStackTrace();
	      }finally{
	         // En el finally cerramos el fichero, para asegurarnos
	         // que se cierra tanto si todo va bien como si salta
	         // una excepcion.
	         try{                   
	            if( null != fr ){  
	               fr.close();    
	            }                 
	         }catch (Exception e2){
	            e2.printStackTrace();
	         }
	      }
		return null;
		
	}
}
